SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
CREATE PROCEDURE [dbo].[spLiquidarEducacionPublica]
@regimenLaboral int,
@PDesde datetime,
@PHasta datetime, 
@Agente int, 
@Organizacion int,
@Tipo int, 
@idLiquidacion int
AS
SET NOCOUNT ON
--close ConceptosALiq
--deallocate ConceptosALiq

declare @AgenteL int
declare @PlazaL int
declare @FBajaL datetime
declare @SueldoBasico int
declare @ValorPuntoDocente float
declare @SuplNoBonif float
declare @Procedimiento varchar(50)
declare @sqlTemp varchar(2000) --Para sql dinamico
declare @idConcepto int
declare @idServicio int
declare @LiqDesde datetime
declare @LiqHasta datetime
declare @DiasALiquidar int

print 'Agente: '+convert(varchar, @Agente)
print 'Organizacion: '+convert(varchar, @Organizacion)

Select   @ValorPuntoDocente = convert(float, valor1) from tb_Parametros where parametro = 'ValorPuntoDocente'
print 'Valor del punto docente: '+convert(varchar, @ValorPuntoDocente)

-- Si no se especifica un agente y una organizacion se hace para todos los docentes
if @Agente is null and @Organizacion is null
	print 'Agente nulo y Organizacion nula'
	-- Creo un cursor con los agente que tengan servicios para el periodo, regimenlaboral especificado
	declare AgentesALiquidar cursor for
	Select Agente, case(s.FechaBaja) when null then 'Continua' else s.FechaBaja end, idPlaza, s.idServicioAgente, isnull(s.FechaBaja, @PHasta) LiqHasta --datediff(day, @Pdesde, isnull(s.FechaBaja, @PHasta)) 
	from tb_ServiciosAgentes s, tb_SubServiciosAgentes ss, tb_Plazas p
	where (( s.FechaBaja is not null and s.FechaAlta <= @PDesde and s.FechaBaja >= @PDesde) or
		(s.FechaBaja is null and s.FechaAlta <= @PDesde)) and
	s.regimenlaboral = @regimenlaboral and
	s.idServicioAgente = ss.servicioagente and
	ss.plaza = p.idPlaza and
	ss.fechaalta = (Select max(fechaalta) from tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	order by agente

if @Agente is null and @Organizacion is not null
	-- Creo un cursor con los agentes que pertenecen a la organizacion que se especifica
	declare AgentesALiquidar cursor for
	Select Agente, s.FechaBaja, idPlaza 
	from tb_ServiciosAgentes s, tb_SubServiciosAgentes ss, tb_Plazas p, tb_Organizaciones o
	where (( s.FechaBaja is not null and s.FechaAlta <= @PDesde and s.FechaBaja >= @PDesde) or
		(s.FechaBaja is null and s.FechaAlta <= @PDesde)) and
	s.regimenlaboral = @regimenlaboral and
	s.idServicioAgente = ss.servicioagente and
	p.organizacion = o.idOrganizaciones and 
	ss.plaza = p.idPlaza and
	o.idOrganizaciones = @Organizacion and
	ss.idSubServicio = (Select max(idSubServicio) from tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	order by agente
	
if @Agente is not null and @Organizacion is null
	-- Creo un cursor con el agente especificado	
	declare AgentesALiquidar cursor for
	Select Agente, s.FechaBaja, idPlaza from tb_ServiciosAgentes s, tb_SubServiciosAgentes ss, tb_Plazas p
	where (( s.FechaBaja is not null and s.FechaAlta <= @PDesde and s.FechaBaja >= @PDesde) or
		(s.FechaBaja is null and s.FechaAlta <= @PDesde)) and
	s.regimenlaboral = @regimenlaboral and
	s.idServicioAgente = ss.servicioagente and 
	ss.plaza = p.idPlaza and
	s.Agente = @Agente and
	ss.idSubServicio = (Select max(idSubServicio) from tb_SubServiciosAgentes where servicioagente = s.idServicioAgente)
	order by agente	

--while @@fetch_status = 0
--begin
--	print 'exec '+@Procedimiento
--	fetch next from ConceptosALiq into @Procedimiento	
--end

open AgentesALiquidar
fetch next from AgentesALiquidar into @agenteL, @FBajaL, @PlazaL, @idServicio, @LiqHasta

--while @@fetch_status = 0
--begin
--	print convert(varchar, @agenteL)+' '+convert(varchar, @FBajaL)
--	fetch next from AgentesALiquidar into @agenteL, @FBajaL, @PlazaL
--end

while @@fetch_status = 0
begin
	if @LiqHasta > @PHasta 
		Select @LiqHasta = @PHasta
	Select @DiasALiquidar = datediff(day, @PDesde, @PHasta)
	declare ConceptosaLiq cursor for
	Select Procedimiento, idConceptoLiquidacion from tb_ConceptosDeLiquidacion where regimenLaboral = @regimenLaboral and habilitado = 'S'
	open ConceptosALiq
	fetch next from ConceptosaLiq into @Procedimiento, @idConcepto
	
	while @@fetch_status = 0
	begin
		Select @sqlTemp = 'declare @retorno float '+char(10)
		Select @sqlTemp = @sqlTemp + 'exec '+@Procedimiento+ ' ' +convert(varchar, @AgenteL)+', '+convert(varchar, @idServicio)+', '+convert(varchar, @PlazaL)+', @retorno output, '+convert(varchar, @idLiquidacion) +', '+convert(varchar, @DiasALiquidar)
		-- Select @sqlTemp = @sqlTemp + 'insert into tb_RegistroDeLiquidaciones (AfectadosPorAjuste, Afiliacion, Agente, Ajuste, Cantidad, CargoSalarial, Concepto, Descripcion, DescuentoExterno, Desde, dias, Embargo, Hasta, Horas, LegajoSalarial, Liquidacion, MontoDescuento, MontoHaberes, Organizacion, Reclamado, Servicio, SituacionRevista) values '+ char(10)
		-- Select @sqlTemp = @sqlTemp + '(null, null, '+convert(varchar, @AgenteL)+', null, 1, null, '+convert(varchar, @idConcepto)+', null, null, null, null, null, null, null, 1, '+convert(varchar, @idLiquidacion)+', 0, @retorno, null, null, null, null)'
		exec(@sqlTemp)
		-- print 'exec '+ @Procedimiento +' '+ convert(varchar,@AgenteL) + ', ' + '0, ' + convert(varchar, @PlazaL) 
		fetch next from ConceptosaLiq into @Procedimiento, @idConcepto
	end
	
	close ConceptosaLiq
	deallocate ConceptosaLiq
fetch next from AgentesALiquidar into @agenteL, @FBajaL, @PlazaL, @idServicio
end

close AgentesALiquidar
deallocate AgentesALiquidar
--Close ConceptosaLiq
--deallocate ConceptosaLiq
GO
